var express = require('express');
var router = express.Router();

const mongoose = require("mongoose");
const jwt = require('jsonwebtoken');

// 2. 定义 Schema (文档的结构，类似于关系型数据库中的表结构。)
// 骨架
// 限制以后往数据库加内容，只允许加骨架里面的字段
const studentSchema = new mongoose.Schema({
  name: String,
  age: Number,
  sex: Number,
  num: Number
});

// 3. 创建实例
// 第一个参数是集合的名称，第二个参数是上面的骨架名
// 集合的名称建议用复数
const Student = mongoose.model('students', studentSchema);





// 查询学生
router.get('/list', function(req, res, next) {
  // console.log(req.headers);


  jwt.verify(req.headers.token, "your_secret_key", (err, decoded) => {
    if (err) {
      console.error('Token 验证失败:', err);
      res.json({
        success: false,
        message: "token无效或者已过期"
      })
    } else {
      // get请求，后端用req.query来接受
      const {page, pagesize, value} = req.query;
      

      // if做了一个容错，如果参数没传，那么不去数据库查找
      if (!page || !pagesize) {
        res.json({
          success: false,
          message: "参数错误"
        });
      } else {
        // find的时机应该是当前端来调用接口之后
        // find查找
        // skip跳过几条
        // limit是取几条

        const obj = (value === 'undefined' || value === "") ? {} : {name: value};
          
        Student.find(obj).skip((page - 1) * pagesize).limit(pagesize)
          .then(data => {
            // countDocuments方法用来获取总条数
            Student.countDocuments().then(count => {
              res.json({
                success: true,
                data: data,
                count
              });
            })
          })
        .catch(err => {
          console.error(err);
        })

        
      }
    }
  })
  



  

  
});


// 新增学生的接口
router.post("/add", (req, res, next) => {
  const { name, num, age, sex } = req.body;
  // 需要得到新增的这个学生的实例
  const student = new Student({
    name,
    num: +num,
    age: +age,
    sex: +sex
  })
  // 用实例去调用save方法，进行数据库的新增
  student.save()
    .then(doc => {
      // doc表示新增进去的这条数据
      res.json({
        success: true,
        message: "新增成功"
      })
    })
    .catch(err => {
        console.error('Error creating user:', err);
    });
  
})


// 编辑学生的接口
router.post("/edit", (req, res, next) => {
  const {name, num, age, sex, id} = req.body;
  if (!name || !num || !age || !sex || !id) {
    res.json({
      success: false,
      message: "参数错误"
    })
  } else {
    // findOneAndUpdate用于修改数据库的数据
    // 第一个参数是查询的条件
    // 第二个参数是要修改的数据
    Student.findOneAndUpdate({ _id: id }, {
      name: name,
      num: +num,
      age: +age,
      sex: +sex,
    }, { new: true })
      .then(user => {
        res.json({
          success: true,
          message: "编辑成功"
        })
      })
      .catch(err => {
        console.error(err);
      });
    
  }
  
})


// 删除学生的接口
router.post("/del", (req, res, next) => {
  // post请求，后端用req.body来接受
  // console.log(req.body);

  // console.log(req.headers.token);


  // token的解密
  jwt.verify(req.headers.token, 'your_secret_key', (err, decoded) => {
    if (err) {
      console.error('Token 验证失败:', err);
      res.json({
        success: false,
        message: "token无效或者已过期"
      })
    } else {
      // console.log('Token 验证成功:', decoded); // decoded 包含了 Payload 中的数据
      const {id} = req.body;
      if (!id) {
        res.json({
          success: false,
          message: "参数错误"
        })
      } else {
        // 去数据库删除数据
        // deleteOne方法就用来删除一条数据,参数就是条件
        Student.deleteOne({ _id: id })
          .then(() => {
            res.json({
              success: true,
              message: "删除成功"
            })
          })
          .catch(err => console.error(err));

        
      }
    }
  });
  

  
})

module.exports = router;
